PythonでWebsocketなサーバ


概要

ST2との連携でちょっと必要になったので作ってみる。

libevent と、geventが必要。→ 結局ST2上で動かないので、地味に書き直し!

環境はMac OSX 10.8.2 、Python 2.7

ST2でのPython環境は Python 2.6



用件

ST2への、他プロセスからの入力を行う方式として、WebSocketでのpushを試してみた。


ST2のプラグインとしてWebSocketのサーバを起動し、他のプロセスからの入力を受ける。

WebSocketのクライアントとサーバどっち書こう、と迷って、サーバにした。

他プロセス側でサーバ書くのだるいと思ったので。



使用ライブラリ一覧

libevent

結局使わない!!!

http://libevent.org

brewから入れると楽。


sudo chown sassembla:wheel /usr/local/lib

sudo chown sassembla:wheel /usr/local/include

が必要だった。


Macでこの辺がwheelになってるのなんでだろう。


gevent

結局使わない!!!

libeventに依存しているので、libeventを先に入れておくこと。

Macだとデフォルトでeasy_installが入っているので、入れるのは楽。

sudo easy_install-2.6 gevent-websocket

2.6なのは、ST2のMac版のデフォルトのPythonがv2.6だから。

Macには標準で2.7入ってるんだけどなっ なっ、、


最初、なにも考えずeasy_installしてたら、2.7が入ってて、ST2から呼べずに死んでた。

下記を参考にimport弄る or 2.6を使う、で、2.6を使う事を選択。

http://d.hatena.ne.jp/holiru/20101223/1293118186



ST2のプラグインとして、上で紹介したWS受ける機構をMainThread以外のとこで実行することで、WSのサーバは完成。

、、したと思ったんだけど、


このライブラリをST2から別スレッドで呼ぼうとしたところ、

「multiThreadには対応してねーよksg」と言われてしまうなどしていた。

http://stackoverflow.com/questions/9692089/why-gevent-on-a-flask-app-with-apache-mod-wsgi-is-raising-notimplementederror



書く

既存のヤツはだめだ!! 

(というかMainThread以外でサーバ動かそうという理屈がそもそもおかしい)


自分で書くことにした。


さまよって、Pythonのみで書かれた力作を発見。

https://github.com/kcuzner/python-websocket-server


いろいろ勉強させてもらいつつ、写経。

単体で動かす事が出来た!! 依存がないぞ素晴らしい。

https://github.com/sassembla/SublimeSocket



ST2で、ErrorとかをPushで受けて、エラー情報や値内容をバッファに表示する

続く